package stackoferror;

/**
 * 由以上可看出，StackLeak（）的递归调用使该线程不断地去创建一个栈帧存入该线程的虚拟机栈中，最终导致栈满溢出出现StackOverflowError异常。解决StackOverflowError异常的方法同样有从内存大小和Java程序两个方面来解决问题。从内存大小上，增加每个线程的虚拟机栈大小，这种方式虽然简便，但在多线程的情况下，随着每个线程所属的虚拟机栈的大小的增加，所能执行的线程也就随之减少了，但我们使用这种方式来解决StackOverflowError异常时，通常要权衡这两个反比因素。从Java程序上无疑就是检查是否出现方法的不合理递归调用，从而减少栈帧的创建和及时的回收。
 * ---------------------
 * 作者：ActChen
 * 来源：CSDN
 * 原文：https://blog.csdn.net/qq_41285600/article/details/82798920
 * 版权声明：本文为博主原创文章，转载请附上博文链接！
 */
public class StackSOF {
    private int length = 1;
    public void stackLeak() {
        length ++ ;
        stackLeak();
    }

    public static void main(String[] args) {
        StackSOF stackSOF = new StackSOF();
        try {
            stackSOF.stackLeak();
        }catch (Throwable e) {
            System.out.println("stackLen " + stackSOF.length) ;
            e.printStackTrace();
        }
    }
}
